﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using BUS;
using DTO;

namespace GUI
{
    public partial class QuanLyMonAn : Form
    {
        public QuanLyMonAn()
        {
            InitializeComponent();
        }

        //Status = 2: cập nhật món ăn
        //Status = 0: Hoàn thành xử lý
        private int _status;

        public int Status
        {
            get { return _status; }
            set { _status = value; }
        }

        private int _index;

        public int Index
        {
            get { return _index; }
            set { _index = value; }
        }

        private MonAnDTO _backupKhuyenMaiDTO;

        public MonAnDTO BackupKhuyenMaiDTO
        {
            get { return _backupKhuyenMaiDTO; }
            set { _backupKhuyenMaiDTO = value; }
        }

        private void QuanLyMonAn_Activated(object sender, EventArgs e)
        {
            panelYesNo.Location = new Point(12, 378);
            panelYesNo.Parent = this;
            panelYesNo.Visible = false;

            KhoiTao();
        }
        DataTable datatable = new DataTable();

        private void KhoiTao()
        {           
            //show combobox LoaiMonAn
            List<LoaiMonDTO> lscbmaDTO = new List<LoaiMonDTO>();
            lscbmaDTO = LoaiMonAnBUS.SelectLoaiMonAnAll();

            cmbLoaiMon.DisplayMember = "TenLoai";
            cmbLoaiMon.ValueMember = "Ma_Loai";
            cmbLoaiMon.DataSource = lscbmaDTO;
            cmbLoaiMon.SelectedIndex = 0;

            List<LoaiMonDTO> lscbmaDTO2 = LoaiMonAnBUS.SelectLoaiMonAnAll();
            clLoai.DisplayMember = "TenLoai";
            clLoai.ValueMember = "Ma_Loai";
            clLoai.DataSource = lscbmaDTO2;
            clLoai.DisplayStyle = DataGridViewComboBoxDisplayStyle.Nothing;

            
            int soMon = NapDuLieu();
            if (soMon != 0)
            {
                btn_lamLai.Enabled = true;
                buttonEnable();
            }
            else
            {
                btn_lamLai.Enabled = false;
                buttonDisable();
            }
        }

        private int NapDuLieu()
        {
            int soMon = 0;
            datatable = MonAnBUS.SelectMonAnAll(ref soMon);

            if (soMon != 0)
            {
                //dataGridView_quanMonAn.DataSource = datatable;
               
                txt_tongMon.Text = soMon.ToString();
                dataGridView_quanMonAn.Rows.Clear();
                for (int i = 0; i < datatable.Rows.Count; i++)
                {
                    DataRow row = datatable.Rows[i];
                    dataGridView_quanMonAn.Rows.Add(row[0],row[1],row[2],row[3].ToString());
                }
            }
            return soMon;
        }

        private void buttonEnable()
        {
            btn_capNhat.Enabled = true;
            btn_xoa.Enabled = true;
        }

        private void buttonDisable()
        {
            btn_capNhat.Enabled = false;
            btn_xoa.Enabled = false;
        }

        private void btn_xoa_Click(object sender, EventArgs e)
        {
            DialogResult res = MessageBox.Show("Xóa món ăn", "Món ăn", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);

            //Lấy vị trí cần xóa
            if (res == DialogResult.Yes)
            {
                Index = dataGridView_quanMonAn.CurrentRow.Index;
                string id = dataGridView_quanMonAn.CurrentRow.Cells[0].Value.ToString().Trim();
                if (MonAnBUS.DeleteMonAnById(id))
                {
                    dataGridView_quanMonAn.Rows.RemoveAt(Index);
                    txt_tongMon.Text = dataGridView_quanMonAn.RowCount.ToString();
                    if (dataGridView_quanMonAn.RowCount > 0)
                    {
                        bool flag = false;
                        for (int i = 0; i < Index; i++)
                        {
                            if (dataGridView_quanMonAn.Rows[i].Visible == true)
                            {
                                flag = true;
                            }
                        }

                        if (flag == false)
                        {
                            btn_xoa.Enabled = false;
                        }
                    }
                    else
                    {
                        btn_xoa.Enabled = false;
                    }
                }
            }
        }

        private void btn_thoat_Click(object sender, EventArgs e)
        {
            this.Dispose();
        }

        private void btn_them_Click(object sender, EventArgs e)
        {
            MonAn fMonAn = new MonAn();
            fMonAn.Show();
            
        }

        private void btn_capNhat_Click(object sender, EventArgs e)
        {
            Index = dataGridView_quanMonAn.CurrentRow.Index;

            //Lưu lại giá trị cần cập nhật, khôi phục lại khi cập nhật không thành công hoặc hủy
            MonAnDTO backup = new MonAnDTO();
            backup.Ma_Mon = dataGridView_quanMonAn.CurrentRow.Cells["clMaMon"].Value.ToString().Trim();
            backup.TenMon = dataGridView_quanMonAn.CurrentRow.Cells["clTenMon"].Value.ToString().Trim();
            backup.Loai = dataGridView_quanMonAn.CurrentRow.Cells["clLoai"].Value.ToString().Trim();
            backup.GiaTien = float.Parse(dataGridView_quanMonAn.CurrentRow.Cells["clGiaTien"].Value.ToString());
            BackupKhuyenMaiDTO = backup;

            ////Ẩn các dòng không cần thiết
            for (int i = 0; i < dataGridView_quanMonAn.RowCount; i++)
            {
                if (i != Index)
                {
                    dataGridView_quanMonAn.Rows[i].Visible = false;
                }
            }
            //cột Loai
            //clLoai.DisplayStyle = DataGridViewComboBoxDisplayStyle.DropDownButton;
            //dataGridView_quanMonAn.Rows[Index].Cells[clLoai.Index].Value = "001";

            //chuyển sang chế độ select cell, cập nhật lại thuộc tính readOnly cho phép chỉnh sữa
            dataGridView_quanMonAn.SelectionMode = DataGridViewSelectionMode.CellSelect;
            dataGridView_quanMonAn.Rows[Index].ReadOnly = false;
            //dataGridView_quanMonAn.Columns["clMaMon"].Visible = false;

            //Set mặc định ô sẽ chỉnh sữa đầu tiên
            dataGridView_quanMonAn.CurrentCell = dataGridView_quanMonAn.Rows[Index].Cells["clTenMon"];
            dataGridView_quanMonAn.BeginEdit(true);

            //Show panel thêm và ẩn đi panel tìm kiếm
            panelYesNo.Visible = true;
            panelChucNang.Visible = false;
            btnYes.Text = "Cập nhật";
            groupBox1.Enabled = false;
            groupBox2.Text = "Cập nhật món ăn";

            Status = 2;

        }

        private void btnYes_Click(object sender, EventArgs e)
        {
            MonAnDTO monAnDTO = new MonAnDTO();

            if (Status == 2)
            {
                monAnDTO.Ma_Mon = dataGridView_quanMonAn.Rows[Index].Cells["clMaMon"].Value.ToString().Trim();
                monAnDTO.TenMon = dataGridView_quanMonAn.Rows[Index].Cells["clTenMon"].Value.ToString().Trim();
                monAnDTO.Loai = dataGridView_quanMonAn.Rows[Index].Cells["clLoai"].Value.ToString().Trim();
                monAnDTO.GiaTien = float.Parse(dataGridView_quanMonAn.Rows[Index].Cells["clGiaTien"].Value.ToString());

                if (MonAnBUS.UpdateMonAnById(monAnDTO))
                {
                    dataGridView_quanMonAn.Rows[Index].ReadOnly = true;
                    MessageBox.Show("Cập nhật thành công");
                }
                else
                {
                    MessageBox.Show("Cập nhật thất bại");
                    dataGridView_quanMonAn.Rows[Index].Cells["clMaMon"].Value = BackupKhuyenMaiDTO.Ma_Mon;
                    dataGridView_quanMonAn.Rows[Index].Cells["clTenMon"].Value = BackupKhuyenMaiDTO.TenMon;
                    dataGridView_quanMonAn.Rows[Index].Cells["clLoai"].Value = BackupKhuyenMaiDTO.Loai;
                    dataGridView_quanMonAn.Rows[Index].Cells["clGiaTien"].Value = BackupKhuyenMaiDTO.GiaTien;
                    dataGridView_quanMonAn.Rows[Index].ReadOnly = true;
                }
            }
            Reset();
        }

        private void Reset()
        {
            //Cập nhật lại các giá trị ban đầu cho DataGridView
            dataGridView_quanMonAn.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
            clLoai.DisplayStyle = DataGridViewComboBoxDisplayStyle.Nothing;
            dataGridView_quanMonAn.Columns["clMaMon"].Visible = true;

            //Cập nhật lại các giá trị ban đầu cho Pannel
            panelYesNo.Visible = false;
            panelChucNang.Visible = true;

            groupBox1.Enabled = true;
            groupBox1.Text = "Tìm kiếm";
            groupBox2.Enabled = true;
            groupBox2.Text = "Thông tin";

            Status = 0;
            Index = -1;

            for (int i = 0; i < dataGridView_quanMonAn.RowCount; i++)
            {
                dataGridView_quanMonAn.Rows[i].Visible = true;
            }

            dataGridView_quanMonAn.CurrentCell = dataGridView_quanMonAn.Rows[0].Cells[0];

            //Khởi động lại các nút:
            if (dataGridView_quanMonAn.RowCount > 0)
            {
                for (int i = 0; i < dataGridView_quanMonAn.RowCount; i++)
                {
                    if (dataGridView_quanMonAn.Rows[i].Visible == true)
                    {
                        buttonEnable();
                        break;
                    }
                }
            }
            else
            {
                buttonDisable();
            }

        }

        private void btnNo_Click(object sender, EventArgs e)
        {
            if (Status == 2)
            {
                dataGridView_quanMonAn.Rows[Index].Cells["clMaMon"].Value = BackupKhuyenMaiDTO.Ma_Mon;
                dataGridView_quanMonAn.Rows[Index].Cells["clTenMon"].Value = BackupKhuyenMaiDTO.TenMon;
                dataGridView_quanMonAn.Rows[Index].Cells["clLoai"].Value = BackupKhuyenMaiDTO.Loai;
                dataGridView_quanMonAn.Rows[Index].Cells["clGiaTien"].Value = BackupKhuyenMaiDTO.GiaTien;
                dataGridView_quanMonAn.Rows[Index].ReadOnly = true;                
            }
            Reset();
        }

        private void btn_lamLai_Click(object sender, EventArgs e)
        {
            cmbLoaiMon.SelectedIndex = 0;
            txt_maMon.Text = null;
            txtTenMon.Text = null;
            txtGiaTien.Text = null;

            NapDuLieu();
            buttonEnable();
        }

        private void Search()
        {
            int vt = -1;
            int temp = 0;
            for (int i = 0; i < dataGridView_quanMonAn.RowCount; i++)
            {
                dataGridView_quanMonAn.Rows[i].Visible = false;

                if (dataGridView_quanMonAn.Rows[i].Cells["clMaMon"].Value.ToString().ToUpper().IndexOf(txt_maMon.Text.Trim().ToUpper()) >= 0
                    && dataGridView_quanMonAn.Rows[i].Cells["clTenMon"].Value.ToString().ToUpper().IndexOf(txtTenMon.Text.Trim().ToUpper()) >= 0
                    && dataGridView_quanMonAn.Rows[i].Cells["clLoai"].Value.ToString().ToUpper().IndexOf(cmbLoaiMon.SelectedValue.ToString().ToUpper()) >= 0
                    && dataGridView_quanMonAn.Rows[i].Cells["clGiaTien"].Value.ToString().ToUpper().IndexOf(txtGiaTien.Text.Trim().ToUpper()) >= 0
                    )
                {
                    dataGridView_quanMonAn.Rows[i].Visible = true;
                    vt = i;
                    temp++;
                    break;
                }
            }

            for (int i = vt + 1; i < dataGridView_quanMonAn.RowCount; i++)
            {
                dataGridView_quanMonAn.Rows[i].Visible = false;

                if (dataGridView_quanMonAn.Rows[i].Cells["clMaMon"].Value.ToString().ToUpper().IndexOf(txt_maMon.Text.Trim().ToUpper()) >= 0
                    && dataGridView_quanMonAn.Rows[i].Cells["clTenMon"].Value.ToString().ToUpper().IndexOf(txtTenMon.Text.Trim().ToUpper()) >= 0
                    && dataGridView_quanMonAn.Rows[i].Cells["clLoai"].Value.ToString().ToUpper().IndexOf(cmbLoaiMon.SelectedValue.ToString().ToUpper()) >= 0
                    && dataGridView_quanMonAn.Rows[i].Cells["clGiaTien"].Value.ToString().ToUpper().IndexOf(txtGiaTien.Text.Trim().ToUpper()) >= 0
                    )
                {
                    dataGridView_quanMonAn.Rows[i].Visible = true;
                    temp++;
                }
            }

            txt_tongMon.Text = temp.ToString();

            if (vt == -1)
            {
                buttonDisable();
            }
            else
            {
                buttonEnable();
                dataGridView_quanMonAn.CurrentCell = dataGridView_quanMonAn.Rows[vt].Cells[0];
                dataGridView_quanMonAn.CurrentCell.Selected=true;
            }

        }

        private void txt_maMon_TextChanged(object sender, EventArgs e)
        {
            Search();
        }

        private void txtTenMon_TextChanged(object sender, EventArgs e)
        {
            Search();
        }

        private void txtGiaTien_TextChanged(object sender, EventArgs e)
        {
            Search();
        }

        private void cmbLoaiMon_SelectedIndexChanged(object sender, EventArgs e)
        {
            Search();
        }

        

       
    }
}
